import BaseModel from './.model';
import { Table, Column, DataType, BelongsToMany, HasMany, ForeignKey, BelongsTo } from 'sequelize-typescript';
import CategoryModel from './category.model';
import OrderItemModel from './order-item.model';
import ProductCategoryModel from './product-category.model';

@Table({ tableName: 'products' })
export default class ProductModel extends BaseModel {
  /** 产品的详细描述 */
  @Column({ type: DataType.TEXT, allowNull: true, comment: '产品的详细描述' })
  detail?: string;

  /** 产品图片的URL列表 */
  @Column({ type: DataType.JSON, allowNull: true, comment: '产品图片的URL列表' })
  imageUrl?: string;

  /** 产品是否上架销售 */
  @Column({ type: DataType.BOOLEAN, allowNull: true, comment: '产品是否上架销售' })
  isOnSale?: boolean;

  /** 产品的名称 */
  @Column({ type: DataType.STRING, comment: '产品的名称' })
  name!: string;

  /** 产品的原始价格 */
  @Column({ type: DataType.FLOAT, allowNull: true, comment: '产品的原始价格' })
  originalPrice?: number;

  /** 产品的当前销售价格 */
  @Column({ type: DataType.FLOAT, comment: '产品的当前销售价格' })
  price!: number;

  /** 产品的规格信息 */
  @Column({ type: DataType.JSON, allowNull: true, comment: '产品的规格信息' })
  specifications?: Record<string, string>;

  /** 产品的唯一编号 */
  @Column({ type: DataType.STRING, comment: '产品的唯一编号' })
  sku!: string;

  /** 产品的当前库存数量 */
  @Column({ type: DataType.INTEGER, comment: '产品的当前库存数量' })
  stock!: number;

  /** 库存警告的最低数量 */
  @Column({ type: DataType.INTEGER, allowNull: true, comment: '库存警告的最低数量' })
  stockWarningLimit?: number;

  /** 产品的单位 */
  @Column({ type: DataType.STRING, allowNull: true, comment: '产品的单位' })
  unit?: string;

  /** 类别ID */
  @ForeignKey(() => CategoryModel)
  @Column({ type: DataType.UUID, allowNull: false, comment: '类别ID' })
  categoryId!: string;

  /** 类别 */
  @BelongsTo(() => CategoryModel)
  category?: CategoryModel;

  /** 产品所属的分类列表 */
  @BelongsToMany(() => CategoryModel, () => ProductCategoryModel)
  categories?: CategoryModel[];

  /** 关联的订单项列表 */
  @HasMany(() => OrderItemModel)
  orderItems?: OrderItemModel[];
}
